<?php
define('DSN', 'mysql:host=localhost;dbname=mvc');
define('USER','root');
define('MDP', '');

abstract class Modele{
	private static $pdo;
	protected $nomClasseMetier='Enregistrement';
	protected $clePrimaire='num';
        
	function __construct(){
	}
        
        /**
         * pdo         * 
         * @return un objet de type PDO pour accéder à la base de données
         */
	static function pdo(){
		if(!isset(self::$pdo)){
			/* Connexion à une base ODBC avec l'invocation de pilote */			try {
//				self::$pdo= new PDO($dsn, $user, $password);
                                self::$pdo= new PDO(DSN, USER, MDP);
			} catch (PDOException $e) {
				echo 'Connexion échouée : ' . $e->getMessage();
			}			
		}
		return self::$pdo;
	}
        
        /**
         * getAll
         * Lire tous les enregistrements d'une table
         * @return un tableau d'instances de la classe $this->nomClasseMetier
         */
	function getAll(){
		$query='select * from '.$this->table;
                // FETCH_CLASS permet de retourner des enregistrements sous forme d'objets de la classe spécifiée
                // ici : $this->nomClasseMetier contient "Enregistrement"
                // La classe Enregistrement est une classe générique vide qui sera automatiquement affublée d'autant
                // d'attributs publics qu'il y a de colonnes dans le jeu d'enregistrements
                $result= self::pdo()->query($query)->fetchAll(PDO::FETCH_CLASS, $this->nomClasseMetier);
                return $result;
	}
        
        /**
         * get
         * Lire un enregistrement d'après une valeur de clef primaire
         * @param $valeurClePrimaire
         * @return une instance de la classe $this->nomClasseMetier
         */
	function get($valeurClePrimaire){
		$query='select * from '.$this->table.' where '.$this->clePrimaire.' = ?';
		$queryPrepare=self::pdo()->prepare($query);
                // Spécifier le type de classe à instancier
                $queryPrepare->setFetchMode( PDO::FETCH_CLASS, $this->nomClasseMetier);
		$queryPrepare->execute(array($valeurClePrimaire));
		$result=$queryPrepare->fetch(PDO::FETCH_CLASS);
		return $result;
	}
}